The present invention relates to the field of digital communications and, in particular, to the bi-directional movement of error-free data.
It is common in digital systems to require significant quantities of data to be moved from one location to another. Devices and methods that focus primarily on this task are often referred to as data movers. Computer interfaces like parallel ports, serial ports, and modems are all forms of data movers. Other examples of parts of systems that fall under this umbrella are back-planes, busses and network interfaces.
Many data transmissions are in the form of packets of data, which, in addition to data characters, may include other characters such as cyclic redundancy code (CRC) characters and framing characters. In many cases, to provide an error-free link, each received packet is checked for errors and the status of the packet is reported back to the transmitter. If an error is found the packet is retransmitted. If no confirmation of receipt is received, the packet is retransmitted. For example, if an acknowledge command (ACK) is received by the device in which a packet originated, this indicates that the packet was received correctly; and if a negative acknowledge command (NAK) is received by the device in which a packet originated, this indicates there was an error. Similarly, if no response is received by the device in which a packet originated, this also indicates there was an error.
Assuming a bi-directional flow of data packets, it is desirable to make these status messages and/or status commands coexist with the data packets. Typically, these status messages are packaged in their own packets and transmitted between data packets. In addition, other link-control commands are transmitted this way.
This method of combining data and commands requires trade-offs between link latency (how long before status is expected to be received) and link overhead (how much non-data must be sent).
For example, after an error is discovered at a remote node, the remote node cannot notify the local node until any packet the remote node is sending is complete. This may cause substantial delay due to the fact that long packets are preferred because they improve throughput. The longer the packet, however, the longer the delay.